import dotenv from 'dotenv';

// 根据环境加载不同的 .env 文件
const envFile = process.env.NODE_ENV === 'production' ? '.env.production' : 
                process.env.NODE_ENV === 'test' ? '.env.test' : '.env';

dotenv.config({ path: envFile });

// 环境变量配置接口
export interface EnvironmentConfig {
  // 服务器配置
  port: number;
  nodeEnv: string;
  
  // 数据库配置
  mongodbUri: string;
  
  // 安全配置
  jwtSecret: string;
  
  // CORS 配置
  allowedOrigins: string[];
  
  // 日志配置
  logLevel: string;
  
  // API 配置
  apiPrefix: string;
  apiVersion: string;
}

// 获取环境变量配置
export const getEnvironmentConfig = (): EnvironmentConfig => {
  const config: EnvironmentConfig = {
    // 服务器配置
    port: parseInt(process.env.PORT || '3000'),
    
    nodeEnv: process.env.NODE_ENV || 'development',
    
    // 数据库配置
    mongodbUri: process.env.MONGODB_URI || 'mongodb://localhost:27017/koa-app',
    
    // 安全配置
    jwtSecret: process.env.JWT_SECRET || 'your-default-jwt-secret',
    
    // CORS 配置
    allowedOrigins: (process.env.ALLOWED_ORIGINS || 'http://localhost:3000,http://localhost:8080').split(','),
    
    // 日志配置
    logLevel: process.env.LOG_LEVEL || 'info',
    
    // API 配置
    apiPrefix: process.env.API_PREFIX || '/api',
    apiVersion: process.env.API_VERSION || 'v1'
  };
  
  // 验证必需的环境变量
  validateEnvironmentConfig(config);
  
  return config;
};

// 验证环境配置
const validateEnvironmentConfig = (config: EnvironmentConfig): void => {
  const required = ['mongodbUri'];
  const missing = required.filter(key => !config[key as keyof EnvironmentConfig]);
  
  if (missing.length > 0) {
    throw new Error(`缺少必需的环境变量: ${missing.join(', ')}`);
  }
  
  // 生产环境安全检查
  if (config.nodeEnv === 'production') {
    if (config.jwtSecret === 'your-default-jwt-secret') {
      throw new Error('生产环境必须设置 JWT_SECRET');
    }
    if (config.mongodbUri.includes('localhost')) {
      console.warn('⚠️  生产环境建议使用远程数据库，而不是 localhost');
    }
  }
};

// 导出配置实例
export const envConfig = getEnvironmentConfig();

export default envConfig;